package com.hyts.agent.spi.method;

import java.lang.reflect.Method;

/**
 * @project-name:coffice-agent
 * @package-name:com.hyts.agent.base.api
 * @author:Libo/Alex
 * @create-date:2019-02-15 10:09
 * @copyright:libo-hyts-github
 * @email:libo2dev@aliyun.com
 * @description:此类主要用于: 接入业务逻辑的实现类，用于客户端去实现的基础服务父接口
 */
public interface AgentExecuteMethod<T> {

    /**
     * 前置服务
     * @param targetSubject
     * @param params
     * @param method
     */
    Object before(Object targetSubject, Object[] params, Method method,T extensParam);

    /**
     * 后置操作
     * @param targetSubject
     * @param params
     * @param method
     * @param result
     */
    Object after(Object targetSubject, Object[] params, Method method, Object result,T extensParam);


    /**
     * 异常处理操作
     * @param throwable
     */
    void throwException(Throwable throwable,T extensParam);

}
